using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;

public class NewMainMenu_LogContextMenu : MonoBehaviour
{
	public List<TextMeshProUGUI> BackgroundTextLines = new List<TextMeshProUGUI>();

	[SerializeField]
	private List<int> BackgroundTextMaxCount = new List<int>();

	[SerializeField]
	private NewMainMenu_LogSubMenu logSubMenu;

	[SerializeField]
	private TextMeshProUGUI optionText;

	private Coroutine currentMainTextWriting;

	[SerializeField]
	private GameObject AnnoyingAssLines;

	private GameObject prefabStored;

	[SerializeField]
	private GameObject prefabHolder;

	[SerializeField]
	private AudioSource[] BackgroundNoiseToDisable;

	private int CurrentSelected;

	private int previousSelected = -1;

	private bool simplesfx_on;

	public CollectibleLog CurrentLog;

	private bool AllTextShown;

	private bool wasEnabled;

	private bool AllowInput = true;

	private void Awake()
	{
		foreach (TextMeshProUGUI backgroundTextLine in BackgroundTextLines)
		{
			BackgroundTextMaxCount.Add(((TMP_Text)backgroundTextLine).text.Length);
			((TMP_Text)backgroundTextLine).maxVisibleCharacters = 0;
		}
	}

	private void Update()
	{
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
		//IL_0035: Unknown result type (might be due to invalid IL or missing references)
		if (AllowInput)
		{
			if (Input.GetKeyDown(PlayerInput.Instance.Key_Confirm) || Input.GetKeyDown(PlayerInput.Instance.Key_Menu))
			{
				SelectOption();
			}
			if (Input.GetKeyDown(PlayerInput.Instance.Key_Cancel))
			{
				NewMainMenuManager.instance.MenuSource.PlayOneShot(NewMainMenuManager.instance.SFX_MenuDeny);
				logSubMenu.AllowInput = true;
				((Component)this).gameObject.SetActive(false);
			}
		}
		if (!wasEnabled && ((Component)this).gameObject.activeSelf)
		{
			previousSelected = -1;
			CurrentSelected = 0;
			wasEnabled = true;
			AllowInput = true;
			((MonoBehaviour)this).StartCoroutine(ShowBackgroundText());
			CheckUpdateScreenText();
			SetupExtraContent();
		}
		if ((Object)(object)prefabStored != (Object)null)
		{
			prefabStored.transform.localPosition = Vector3.Lerp(prefabStored.transform.localPosition, Vector3.zero, 5f * Time.deltaTime);
		}
	}

	private void SelectOption()
	{
		AllowInput = false;
		previousSelected = -1;
		NewMainMenuManager.instance.MenuSource.PlayOneShot(NewMainMenuManager.instance.SFX_MenuSelect);
		((MonoBehaviour)this).StartCoroutine(SelectOptionTimer());
		CheckUpdateScreenText();
	}

	private IEnumerator SelectOptionTimer()
	{
		yield return (object)new WaitForSeconds(0.5f);
		NewMainMenuManager.instance.MenuSource.PlayOneShot(NewMainMenuManager.instance.SFX_MenuDeny);
		AudioSource[] backgroundNoiseToDisable = BackgroundNoiseToDisable;
		for (int i = 0; i < backgroundNoiseToDisable.Length; i++)
		{
			backgroundNoiseToDisable[i].UnPause();
		}
		logSubMenu.AllowInput = true;
		((Component)this).gameObject.SetActive(false);
	}

	private void CheckUpdateScreenText()
	{
		if (previousSelected != CurrentSelected)
		{
			previousSelected = CurrentSelected;
			string text = "";
			string[] array = new string[1] { "返回" };
			for (int i = 0; i < array.Length; i++)
			{
				text = ((CurrentSelected != i) ? (text + array[i]) : (AllowInput ? (text + "<color=yellow>-> " + array[i] + "</color>") : (text + "<color=green>-> " + array[i] + "</color>")));
			}
			ChangeMainText(text, AllowAnimation: true);
		}
	}

	private void SetupExtraContent()
	{
		//IL_0065: Unknown result type (might be due to invalid IL or missing references)
		//IL_006a: Unknown result type (might be due to invalid IL or missing references)
		//IL_00af: Unknown result type (might be due to invalid IL or missing references)
		AnnoyingAssLines.SetActive(false);
		if (!((Object)(object)CurrentLog.LogPrefab != (Object)null))
		{
			return;
		}
		simplesfx_on = SettingsManager.Instance.GetBoolSettingValue("SimpleSFX");
		if ((Object)(object)CurrentLog.LogPrefab != (Object)null)
		{
			prefabStored = Object.Instantiate<GameObject>(CurrentLog.LogPrefab, prefabHolder.transform.position, Quaternion.identity);
			prefabStored.transform.SetParent(prefabHolder.transform, false);
			prefabStored.transform.localPosition = new Vector3(0f, -999f, 0f);
			NewMainMenuManager.instance.MenuSource.PlayOneShot(CurrentLog.LogOpenSound);
		}
		if (CurrentLog.LogType == CollectibleLog.CollectibleLogType.音频)
		{
			AudioSource[] backgroundNoiseToDisable = BackgroundNoiseToDisable;
			for (int i = 0; i < backgroundNoiseToDisable.Length; i++)
			{
				backgroundNoiseToDisable[i].Pause();
			}
		}
		previousSelected = -1;
		CheckUpdateScreenText();
	}

	private void OnDisable()
	{
		wasEnabled = false;
		AllTextShown = false;
		ChangeMainText("", AllowAnimation: false);
		AnnoyingAssLines.SetActive(true);
		((Behaviour)CameraManager.instance.ReverbFilter).enabled = true;
		if ((Object)(object)prefabStored != (Object)null)
		{
			Object.Destroy((Object)(object)prefabStored);
		}
		foreach (TextMeshProUGUI backgroundTextLine in BackgroundTextLines)
		{
			((TMP_Text)backgroundTextLine).maxVisibleCharacters = 0;
		}
		currentMainTextWriting = null;
	}

	private IEnumerator ShowBackgroundText()
	{
		if (!SettingsManager.Instance.GetBoolSettingValue("SimpleVFX"))
		{
			List<TextMeshProUGUI> finishedTexts = new List<TextMeshProUGUI>();
			while (!AllTextShown)
			{
				yield return null;
				foreach (TextMeshProUGUI backgroundTextLine in BackgroundTextLines)
				{
					if (!finishedTexts.Contains(backgroundTextLine) && ((TMP_Text)backgroundTextLine).maxVisibleCharacters >= ((TMP_Text)backgroundTextLine).text.Length)
					{
						finishedTexts.Add(backgroundTextLine);
					}
					else if (((TMP_Text)backgroundTextLine).maxVisibleCharacters < ((TMP_Text)backgroundTextLine).text.Length)
					{
						float num = 100 + Random.Range(-60, -10);
						((TMP_Text)backgroundTextLine).maxVisibleCharacters = ((TMP_Text)backgroundTextLine).maxVisibleCharacters + Mathf.CeilToInt(num * Time.deltaTime);
						((TMP_Text)backgroundTextLine).maxVisibleCharacters = Mathf.Clamp(((TMP_Text)backgroundTextLine).maxVisibleCharacters, 0, ((TMP_Text)backgroundTextLine).text.Length);
					}
				}
				if (CompareTextLists(finishedTexts, BackgroundTextLines))
				{
					AllTextShown = true;
					MonoBehaviour.print((object)"all text shown");
				}
			}
			yield break;
		}
		foreach (TextMeshProUGUI backgroundTextLine2 in BackgroundTextLines)
		{
			((TMP_Text)backgroundTextLine2).maxVisibleCharacters = ((TMP_Text)backgroundTextLine2).text.Length;
		}
	}

	private bool CompareTextLists(List<TextMeshProUGUI> list1, List<TextMeshProUGUI> list2)
	{
		if (list1.Count != list2.Count)
		{
			return false;
		}
		for (int i = 0; i < list1.Count; i++)
		{
			if (((TMP_Text)list1[i]).text != ((TMP_Text)list2[i]).text)
			{
				return false;
			}
		}
		return true;
	}

	public void ChangeMainText(string text, bool AllowAnimation)
	{
		((TMP_Text)optionText).text = text;
		if (!SettingsManager.Instance.GetBoolSettingValue("SimpleVFX") && AllowAnimation)
		{
			((TMP_Text)optionText).maxVisibleCharacters = 0;
			if (currentMainTextWriting != null)
			{
				((MonoBehaviour)this).StopCoroutine(currentMainTextWriting);
			}
			currentMainTextWriting = ((MonoBehaviour)this).StartCoroutine(ScrollMainText());
		}
		else
		{
			((TMP_Text)optionText).maxVisibleCharacters = text.Length;
		}
	}

	private IEnumerator ScrollMainText()
	{
		yield return null;
		while (((TMP_Text)optionText).maxVisibleCharacters < ((TMP_Text)optionText).text.Length)
		{
			float num = 600 + Random.Range(-120, 0);
			TextMeshProUGUI obj = optionText;
			((TMP_Text)obj).maxVisibleCharacters = ((TMP_Text)obj).maxVisibleCharacters + Mathf.CeilToInt(num * Time.deltaTime);
			((TMP_Text)optionText).maxVisibleCharacters = Mathf.Clamp(((TMP_Text)optionText).maxVisibleCharacters, 0, ((TMP_Text)optionText).text.Length);
			yield return null;
		}
	}
}
